package com.kaizeli.website.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kaizeli.website.pojo.entity.Invoice;
import com.kaizeli.website.pojo.dto.InvoiceDTO;
import com.kaizeli.website.response.Result;

import java.math.BigDecimal;
import java.util.List;

/**
 * 开票单服务接口
 */
public interface InvoiceService extends IService<Invoice> {

    /**
     * 根据验收单ID查询开票单列表
     */
    Result<List<InvoiceDTO>> getInvoicesByAcceptanceId(Integer acceptanceId);

    /**
     * 根据项目ID查询开票单列表
     */
    Result<List<InvoiceDTO>> getInvoicesByProjectId(Long projectId);

    /**
     * 根据开票状态查询开票单列表
     */
    Result<List<InvoiceDTO>> getInvoicesByInvoiceStatus(String invoiceStatus);

    /**
     * 创建开票单
     */
    Result<Invoice> createInvoice(Invoice invoice);

    /**
     * 更新开票单
     */
    Result<Void> updateInvoice(Integer id, Invoice invoice);

    /**
     * 更新开票状态
     */
    Result<Void> updateInvoiceStatus(Integer id, String invoiceStatus);

    /**
     * 计算项目总开票金额
     */
    Result<BigDecimal> calculateTotalInvoiceAmount(Long projectId);

    /**
     * 根据验收单自动创建开票单
     */
    Result<Invoice> createInvoiceFromAcceptance(Integer acceptanceId);

    /**
     * 根据ID查询开票单详情
     */
    Result<InvoiceDTO> getInvoiceById(Integer id);

    /**
     * 删除开票单
     */
    Result<Void> deleteInvoice(Integer id);
}
